---
title: カスケードレイヤー
description: CSSカスケードレイヤーは、CSSルールが要素に適用される順序を管理するための機能です。
---

## 概要

Yamada UIは、CSSの[カスケードレイヤー](https://developer.mozilla.org/ja/docs/Web/CSS/@layer)を使用して、[テーマ](/docs/theming)と[Style Props](/docs/styling/style-props)に優先順位を設定しています。この優先順位は、コンポーネントのスタイリングをする上で重要な役割を果たします。

## レイヤーの種類

レイヤーの種類は、以下の通りです。

- `tokens`: [テーマ](/docs/theming)のトークン。
- `reset`: [リセットスタイル](/docs/styling/reset-styles)。
- `global`: [グローバルスタイル](/docs/styling/global-styles)。
- `base`: コンポーネントの[ベーススタイル](/docs/components/styled#ベーススタイル)。
- `size`: コンポーネントの[サイズスタイル](/docs/components/styled#サイズスタイル)。
- `variant`: コンポーネントの[バリアントスタイル](/docs/components/styled#バリアントスタイル)。
- `props`: コンポーネントの[プロップススタイル](/docs/components/styled#プロップススタイル)。
- `compounds`: コンポーネントの[コンポジットスタイル](/docs/components/styled#コンポジットスタイル)。

## レイヤーの順序

生成されるレイヤーの順序は、以下の通りです。この優先順位を基にして、同じプロパティは上書きされていきます。

```css
@layer tokens, reset, global, base, size, variant, props, compounds;
```

:::note
[Style Props](/docs/styling/style-props)は、レイヤーが設定されていないので、[!important](https://developer.mozilla.org/ja/docs/Web/CSS/important)が付与されていない限り、常に優先されます。
:::

## カスタマイズ

::::steps

### テーマを生成する

[CLI](/docs/theming/cli)を使用してテーマを生成します。

:::warning
下記のコマンドを実行する前に、`@yamada-ui/cli`をインストールして`init`コマンドを実行する必要があります。詳しくは、[こちら](/docs/get-started/cli)をご覧ください。
:::

:::code-group

```bash [pnpm]
pnpm yamada-cli theme
```

```bash [npm]
npm yamada-cli theme
```

```bash [yarn]
yarn yamada-cli theme
```

```bash [bun]
bun yamada-cli theme
```

:::

### コンフィグを変更する

生成したテーマの`config.ts`を変更します。

```tsx title="theme/config.ts" {1,4-13,16}
import type { LayersConfig } from "@yamada-ui/react"
import { defineConfig } from "@yamada-ui/react"

export const layers: LayersConfig = {
  tokens: { name: "tokens", order: 0 },
  reset: { name: "reset", order: 1 },
  global: { name: "global", order: 2 },
  base: { name: "base", order: 3 },
  size: { name: "size", order: 4 },
  variant: { name: "variant", order: 5 },
  props: { name: "props", order: 6 },
  compounds: { name: "compounds", order: 7 },
}

export const config = defineConfig({
  css: { layers, varPrefix: "ui" },
  breakpoint: { direction: "down", identifier: "@media screen" },
  defaultColorMode: "dark",
  defaultThemeScheme: "base",
  notice: { duration: 5000 },
  theme: { responsive: true },
})
```

### プロバイダーを更新する

生成したテーマを`UIProvider`に設定します。

```tsx {2,6}
import { UIProvider } from "@workspaces/ui"
import { theme, config } from "@workspace/theme"

const App = () => {
  return (
    <UIProvider theme={theme} config={config}>
      <YourApplication />
    </UIProvider>
  )
}
```

::::

## 無効にする

カスケードレイヤーを無効にする場合は、`css.layers`に`false`にします。

```tsx title="theme/config.ts"
import { defineConfig } from "@yamada-ui/react"

export const config = defineConfig({
  css: { layers: false, varPrefix: "ui" }, // [!code highlight]
  breakpoint: { direction: "down", identifier: "@media screen" },
  defaultColorMode: "dark",
  defaultThemeScheme: "base",
  notice: { duration: 5000 },
  theme: { responsive: true },
})
```
